package com.xiongwei.template;

/**
 * @author XiongWei
 * @date 2024/1/26
 */
public abstract class AbstractSoyaMilk {

    /**
     * 模板方法, 不让子类覆盖
     */
    final void make() {
        select();
        if (customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    /**
     * 钩子方法：默认不做任何事情，子类视情况覆盖
     * @return
     */
    public boolean customerWantCondiments() {
        return Boolean.TRUE;
    }

    /**
     * 选材
     */
    void select() {
        System.out.println("开始选材");
    }

    /**
     * 添加配料
     */
    abstract void addCondiments();

    /**
     * 浸泡
     */
    void soak() {
        System.out.println("开始泡泡");
    }

    /**
     * 打碎
     */
    void beat() {
        System.out.println("开始打碎");
    }


}
